НУЛП, ІКНІ, САП
Тема
оцінка
підпис
КН-24
6
МЕТОДИ ЧИСЕЛЬНОГО ІНТЕГРУВАННЯ ФУНКЦІЙ
Назаревич В.О.
№ залікової: 1408545
Чисельні методи
Викладач:
к.т.н., асистент
Мельник М. Р.
Мета: Ознайомлення з методами чисельного інтегрування диференціальних рівнянь та їх практичним застосуванням.
Завдання:
1. Ознайомитись з методами чисельного інтегрування диференціальних рівнянь та їх практичним застосуванням.
2. Одержати індивідуальне завдання.
3. Знайти розв'язки заданого рівняння методом Ейлера, Рунге-Кутта, модифікованого методу Ейлера.
4. Порівняти ефективність і точність даних методів.
Варіант – 3
Хід роботи: Для виконання лабораторного завдання створюємо програму в MATLAB для знаходження розв’язку диференціального рівнняння.
Код програми:
clc
clear all;
a = 1;
b = 2;
f = @(x, y)y-(sin(x.^0.5)-cos(x.^0.5)/2*x.^0.5);
H_ME_01 = 0.1;
X_ME_01 = a:H_ME_01:b;
Y_ME_01 = zeros(1, length(X_ME_01));
Y_ME_01(1) = 0;
for i = 1:(length(Y_ME_01) - 1)
Y_ME_01(i + 1) = Y_ME_01(i) + H_ME_01*(f(X_ME_01(i), Y_ME_01(i)));
end
H_ME_001 = 0.01;
X_ME_001 = a:H_ME_001:b;
Y_ME_001 = zeros(1, length(X_ME_001));
Y_ME_001(1) = 0;
for i = 1:(length(Y_ME_001) - 1)
Y_ME_001(i + 1) = Y_ME_001(i) + H_ME_001*(f(X_ME_001(i), Y_ME_001(i)));
end
H_ME_0001 = 0.001;
X_ME_0001 = a:H_ME_0001:b;
Y_ME_0001 = zeros(1, length(X_ME_0001));
Y_ME_0001(1) = 0;
for i = 1:(length(Y_ME_0001) - 1)
Y_ME_0001(i + 1) = Y_ME_0001(i) + H_ME_0001*(f(X_ME_0001(i), Y_ME_0001(i)));
end
H_MRK_01 = 0.1;
X_MRK_01 = a:H_MRK_01:b;
Y_MRK_01 = zeros(1, length(X_MRK_01));
Y_MRK_01(1) = 0;
for i = 1:(length(Y_MRK_01) - 1)
K0 = H_MRK_01 * f(X_MRK_01(i), Y_MRK_01(i));
K1 = H_MRK_01 * f(X_MRK_01(i) + H_MRK_01/2, Y_MRK_01(i) + K0/2);
K2 = H_MRK_01 * f(X_MRK_01(i) + H_MRK_01/2, Y_MRK_01(i) + K1/2);
K3 = H_MRK_01 * f(X_MRK_01(i) + H_MRK_01, Y_MRK_01(i) + K2);
Y_MRK_01(i+1) = Y_MRK_01(i) + (K0 + 2*K1 + 2*K2 + K3)/6 ;
end
H_MRK_001 = 0.01;
X_MRK_001 = a:H_MRK_001:b;
Y_MRK_001 = zeros(1, length(X_MRK_001));
Y_MRK_001(1) = 0;
for i = 1:(length(Y_MRK_001) - 1)
K0 = H_MRK_001 * f(X_MRK_001(i), Y_MRK_001(i));
K1 = H_MRK_001 * f(X_MRK_001(i) + H_MRK_001/2, Y_MRK_001(i) + K0/2);
K2 = H_MRK_001 * f(X_MRK_001(i) + H_MRK_001/2, Y_MRK_001(i) + K1/2);
K3 = H_MRK_001 * f(X_MRK_001(i) + H_MRK_001, Y_MRK_001(i) + K2);
Y_MRK_001(i+1) = Y_MRK_001(i) + (K0 + 2*K1 + 2*K2 + K3)/6;
end
H_MRK_0001 = 0.001;
X_MRK_0001 = a:H_MRK_0001:b;
Y_MRK_0001 = zeros(1, length(X_MRK_0001));
Y_MRK_0001(1) = 0;
for i = 1:(length(Y_MRK_0001) - 1)
K0 = H_MRK_0001 * f(X_MRK_0001(i), Y_MRK_0001(i));
K1 = H_MRK_0001 * f(X_MRK_0001(i) + H_MRK_0001/2, Y_MRK_0001(i) + K0/2);
K2 = H_MRK_0001 * f(X_MRK_0001(i) + H_MRK_0001/2, Y_MRK_0001(i) + K1/2);
K3 = H_MRK_0001 * f(X_MRK_0001(i) + H_MRK_0001, Y_MRK_0001(i) + K2);
Y_MRK_0001(i+1) = Y_MRK_0001(i) + (K0 + 2*K1 + 2*K2 + K3)/6;
end
H_MRK = 1/100000;
X_MRK = a:H_MRK:b;
Y_MRK = zeros(1, length(X_MRK));
Y_MRK(1) = 0;
for i = 1:(length(Y_MRK) - 1)
K0 = H_MRK * f(X_MRK(i), Y_MRK(i));
K1 = H_MRK * f(X_MRK(i) + H_MRK/2, Y_MRK(i) + K0/2);
K2 = H_MRK * f(X_MRK(i) + H_MRK/2, Y_MRK(i) + K1/2);
K3 = H_MRK * f(X_MRK(i) + H_MRK, Y_MRK(i) + K2);
Y_MRK(i+1) = Y_MRK(i) + (K0 + 2*K1 + 2*K2 + K3)/6 ;
end
H_MME_01 = 0.1;
X_MME_01 = a:H_MME_01:b;
Y_MME_01 = zeros(1, length(X_MME_01));
Y_MME_01(1) = 0;
for i = 1:(length(Y_MME_01) - 1)
Y_MME_01(i + 1) = Y_MME_01(i) + H_MME_01*(f(X_MME_01(i) + H_MME_01/2, Y_MME_01(i) + ((H_MME_01*f(X_MME_01(i), Y_MME_01(i)))/2)));
end
H_MME_001 = 0.01;
X_MME_001 = a:H_MME_001:b;
Y_MME_001 = zeros(1, length(X_MME_001));
Y_MME_001(1) = 0;
for i = 1:(length(Y_MME_001) - 1)
Y_MME_001(i + 1) = Y_MME_001(i) + H_MME_001*(f(X_MME_001(i) + H_MME_001/2, Y_MME_001(i) + ((H_MME_001*f(X_MME_001(i), Y_MME_001(i)))/2)));
end
H_MME_0001 = 0.001;
X_MME_0001 = a:H_MME_0001:b;
Y_MME_0001 = zeros(1, length(X_MME_0001));
Y_MME...